1//////////////////////////////////////////////////////////////////////////////////////////////
  2// LibFile: tripod_mounts.scad
  3//   Mount plates for tripods.  Currently only the Manfrotto RC2 plate. 
  4// Includes:
  5//   include <BOSL2/std.scad>
  6//   include <BOSL2/tripod_mounts.scad>
  7// FileGroup: Parts
  8// FileSummary: Tripod mount plates: RC2
  9//////////////////////////////////////////////////////////////////////////////////////////////
 10
 11
 12// Module: manfrotto_rc2_plate()
 13// Synopsis: Creates a Manfrotto RC2 tripod quick release mount plate.
 14// SynTags: Geom
 15// Topics: Parts
 16// See Also: threaded_rod()
 17// Usage:
 18//   manfrotto_rc2_plate([chamfer],[anchor],[orient],[spin]) [ATTACHMENTS];
 19// Description:
 20//   Creates a Manfrotto RC2 quick release mount plate to mount to a tripod.  The chamfer argument
 21//   lets you control whether the model edges are chamfered.  By default all edges are chamfered,
 22//   but you can set it to "bot" to chamfer only the bottom, so that connections to a model larger
 23//   than the plate doin't have a V-groove at the junction.  The plate is 10.5 mm thick.
 24// Arguments:
 25//   chamfer = "none" for no chamfer, "all" for full chamfering, and "bot" or "bottom" for bottom chamfering.  Default: "all".
 26// Examples:
 27//   manfrotto_rc2_plate();
 28//   manfrotto_rc2_plate("bot");
 29module manfrotto_rc2_plate(chamfer="all",anchor,orient,spin)
 30{
 31  chsize=0.5;
 32
 33  dummy = assert(in_list(chamfer, ["bot","bottom","all","none"]), "chamfer must be \"all\", \"bottom\", \"bot\", or \"none\"");
 34  chamf_top = chamfer=="all";
 35  chamf_bot = in_list(chamfer, ["bot","bottom","all"]);
 36
 37  length = 52.5;
 38  innerlen=43;
 39  
 40  topwid = 37.4;
 41  botwid = 42.4;
 42  
 43  thickness = 10.5;
 44
 45  flat_height=3;
 46  angled_size=5;
 47  angled_height = thickness - flat_height*2;
 48  angled_width = sqrt(angled_size^2-angled_height^2);
 49
 50  corner_space = 25;
 51  corner_space_ht = 4.5;
 52
 53  left_top=2;
 54
 55  pts = turtle([
 56                "move",botwid,
 57                "left",
 58                "move", flat_height,
 59                "xymove", [-angled_width, angled_height],
 60                "move", flat_height,
 61                "left",
 62                "move", topwid,
 63                "left",
 64                "move", left_top,
 65                "jump", [0,flat_height]
 66               ]);
 67
 68
 69  cutout_len=26;
 70
 71
 72  facet = [
 73            back(-left_top,select(pts,-3)),
 74            each fwd(1.5,select(pts,-2,-1)),
 75            [-10,-left_top+select(pts,-1).y],
 76            left(10,back(-flat_height,select(pts,-3)))
 77          ];
 78
 79  attachable(anchor,spin,orient,size=[botwid,length,thickness],size2=[topwid,length],shift=[.64115/2,0]){
 80    tag_scope()
 81    down(thickness/2)
 82    diff()
 83      linear_sweep(pts,h=length,convexity=4,orient=FWD,anchor=FWD){
 84          tag("remove"){
 85            zflip_copy()
 86              down(.01)fwd(.01)left(.01)position(LEFT+FRONT+BOT)
 87                cuboid([corner_space,(length-innerlen)/2,thickness+.02], chamfer=-chsize,
 88                       orient=FWD,anchor=TOP+LEFT+FWD,edges=chamf_top?"ALL":TOP);
 89            fwd(left_top)position(LEFT+BACK)linear_sweep(h=cutout_len,facet,convexity=4,anchor=RIGHT+BACK);
 90          }
 91          if (chamf_bot){
 92            edge_mask(FRONT+LEFT)chamfer_edge_mask(length,chsize);
 93            edge_mask(FRONT+RIGHT)chamfer_edge_mask(length,chsize);
 94            edge_mask(FRONT+TOP)chamfer_edge_mask(length,chsize);        
 95            edge_mask(FRONT+BOT)chamfer_edge_mask(length,chsize);
 96            edge_mask(TOP+RIGHT)chamfer_edge_mask(length,chsize);
 97            edge_mask(BOT+RIGHT)chamfer_edge_mask(length,chsize);
 98            zflip_copy(){
 99               right(corner_space)edge_mask(TOP+LEFT) chamfer_edge_mask(length,chsize);
100               down((length-innerlen)/2)edge_mask(TOP+LEFT) chamfer_edge_mask(length,chsize);
101            }
102          }
103          if (chamf_top){
104            edge_mask(BACK+LEFT) chamfer_edge_mask(length,chsize);
105            edge_mask(BACK+RIGHT) chamfer_edge_mask(length,chsize);
106            edge_mask(BACK+TOP) chamfer_edge_mask(length,chsize);        
107            edge_mask(BACK+BOT) chamfer_edge_mask(length,chsize);
108          }
109        }
110    children();
111    }
112}